package com.woniuxy.yoga.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.woniuxy.yoga.commons.core.model.PageInfo;
import com.woniuxy.yoga.order.dao.model.OrderInfo;
import com.woniuxy.yoga.order.model.dto.DataDto;
import com.woniuxy.yoga.order.model.dto.OrderInfoDto;
import com.woniuxy.yoga.order.model.param.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 订单表 服务类
 * </p>
 *
 * @author 韦用文,刘存益,郎腾霄
 * @since 2023年11月28日
 */
public interface OrderInfoService extends IService<OrderInfo> {

    /**
     * 下单
     * @param param 下单参数
     * @return String
     */
    OrderInfoDto createOrder(CreateOrderParam param);

    /**
     * 订单支付
     * @param param 支付参数
     * @return String
     */
    String pagePay(OrderPagePayParam param) throws Exception;

    /**
     * 异步回调接口
     * @param params params
     */
    void orderNotify(Map<String, String> params) throws Exception ;

    /**
     * 完成订单
     * @param orderNum 订单编号
     */
    void completeOrder(String orderNum) throws Exception;

    /**
     * 分页查询所有订单
     * @param param 分页查询所有订单参数
     * @return PageInfo
     */
    PageInfo selectOrders(SelectOrdersParam param);

    /**
     * 商家分页查询订单
     * @param param param
     * @return PageInfo
     */
    PageInfo selectStoreOrders(SelectStoreOrdersParam param);

    /**
     * 用户查询订单
     * @param param param
     * @return PageInfo
     */
    PageInfo selectUserOrders(SelectUserOrdersParam param);

    /**
     * 通过订单编号返回订单信息
     * @param orderNum 订单编号
     * @return OrderInfoDto
     */
    OrderInfoDto getByOrderNum(String orderNum);

    /**
     * 生成次普通卡进度表
     * @param orderNum 订单编号
     */
    void createExpCard(String orderNum,Integer userId);

    /**
     * 生成次卡进度表
     * @param orderNum 订单编号
     * @param orderCount 数量
     */
    void createSubCard(String orderNum,Integer orderCount,Integer userId);

    /**
     * 生成月卡进度表
     * @param orderNum 订单编号
     * @param orderCount 数量
     */
    void createMonCard(String orderNum,String payDate,Integer orderCount,Integer userId);

    /**
     * 生成终身卡进度表
     * @param orderNum 订单编号
     */
    void createLifeCard(String orderNum,Integer userId);

    /**
     * 生成团课进度表
     * @param orderNum 订单编号
     */
    void createTeaCard(String orderNum,Integer hourCount,Integer userId);

    /**
     * 生成私教课进度表
     * @param orderNum 订单编号
     */
    void createPriCard(String orderNum,Integer coachId,Integer orderCount,Integer userId);

    /**
     * 修改订单评价状态
     * @param param 参数
     */
    void updateEvaluateState(UpdateEvaluateStateParam param);

    /**
     * 通过门店id查询订单集合
     * @param storeId 门店id
     * @return List<OrderInfoDto>
     */
    List<OrderInfoDto> listOrdersByStoreId(Integer storeId);

    /**
     * 获取一定时间段场馆的订单成交量和营业额
     * @param param 参数
     * @return DataDto
     */
    DataDto getDataByTime(GetDataParam param);

    /**
     * 商家分页查询在学用户信息
     * @param param 参数
     * @return PageInfo
     */
    PageInfo selectStudyUser(SelectStudyUserParam param);
}
